package de.hska.artikelverwaltung.db;

import static de.hska.util.EjbConstants.ERSTE_VERSION;
import static de.hska.util.EjbConstants.KEINE_ID;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Version;

@Entity
@Table(name="artikel")
@NamedQueries({
	@NamedQuery(name  = Artikel.FIND_VERFUEGBARE_ARTIKEL,
                query = "FROM     Artikel a " +
                        "WHERE    a.ausgesondert = false " +
				        "ORDER BY a.id ASC")
})
public class Artikel implements Serializable {
	private static final long serialVersionUID = -3700579190995722151L;
	static final String FIND_VERFUEGBARE_ARTIKEL = "findVerfuegbareArtikel";

	@Id
	@GeneratedValue(generator="artikel_sequence_name")
	@SequenceGenerator(name="artikel_sequence_name", sequenceName="artikel_a_id_seq", allocationSize=1)
	@Column(name="a_id", nullable=false)
	private Long id = KEINE_ID;

	@Version
	private int version = ERSTE_VERSION;
	
	@Column(length=32, nullable=false)
	private String bezeichnung = "";
	
	private boolean ausgesondert = false;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public int getVersion() {
		return version;
	}

	public void setVersion(int version) {
		this.version = version;
	}

	public String getBezeichnung() {
		return bezeichnung;
	}

	public void setBezeichnung(String bezeichnung) {
		this.bezeichnung = bezeichnung;
	}

	public boolean isAusgesondert() {
		return ausgesondert;
	}

	public void setAusgesondert(boolean ausgesondert) {
		this.ausgesondert = ausgesondert;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + (ausgesondert ? 1231 : 1237);
		result = prime * result
				+ ((bezeichnung == null) ? 0 : bezeichnung.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Artikel other = (Artikel) obj;
		if (ausgesondert != other.ausgesondert)
			return false;
		if (bezeichnung == null) {
			if (other.bezeichnung != null)
				return false;
		} else if (!bezeichnung.equals(other.bezeichnung))
			return false;
		return true;
	}

	@Override
	public String toString() {
		return "{id=" + id + ", version=" + version +
		       ", bezeichnung=" + bezeichnung + ", ausgesondert=" + ausgesondert + "}";
	}

}
